package com.atguigu.f_tcp_plus;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;

/*
    数据回显
 */
public class Server {//服务器

    public static void main(String[] args) throws IOException {
        //创建服务端的对象
        ServerSocket ss = new ServerSocket(10010);

        //根据服务的的对象获取Socket对象 --> 此步骤也是在监听客户端发来的消息
        Socket accept = ss.accept();

        //根据Socket对象获取流对象
        InputStream is = accept.getInputStream();

        //获取客户端的ip地址对象
        InetAddress address = accept.getInetAddress();

        System.out.println("发件人 : " + address);

        byte[] bys = new byte[1024];

        //通讯的输入流对象获取数据 -> 读数据
        //客户端循环发 服务器就循环读
        int len;

        //创建服务器本地的输出流对象
        //当客户端多次给服务器发送文件时,如果不操作会覆盖服务器硬盘上的其他文件
        //解决方案1 : 用当前时间毫秒值 作为文件名
        //FileOutputStream fos =
                //new FileOutputStream("C:\\Users\\WH-HKB\\Desktop\\服务器硬盘\\"+System.currentTimeMillis()+".txt");

        //解决方案2 : UUID 工具类 自动生成随机ID作为文件名
        FileOutputStream fos =
                new FileOutputStream("C:\\Users\\WH-HKB\\Desktop\\服务器硬盘\\"+ UUID.randomUUID() +".txt");

        while ((len = is.read(bys)) != -1){
            //要把读到的数据 存到服务器硬盘上 [服务器本地的输出流对象]
            fos.write(bys,0,len);
        }

        //此循环结束不了 ,想结束 -> 必须由客户端告知服务器已经发送完毕了!




        //服务器给客户端发送回显信息
        OutputStream os = accept.getOutputStream();
        os.write("服务器已收到!".getBytes());

        //关闭服务器
        //ss.close();

        //关闭本地流
        fos.close();

    }
}
